<?php
	require 'libs/csrf.php';
	require 'libs/validations.php';

	class userController {
		// Renderiza la vista de la página de registro de usuarios.
		public function signup() {
			if (empty($_POST['signup_submit'])) {	
				global $url_routes, $configuration;

				$head_title = 'Regístrate';

				$messages = $_SESSION['messages'];

				// Agrega un token al formulario de búsqueda y registro de usuarios.
				$csrf = new csrf();
				$token = $csrf -> generateToken();

				unset($_SESSION['messages'], $csrf);

				require_once 'views/layouts/head.php';
				require_once 'views/layouts/navbar.php';
				require_once 'views/pages/signup.php';
				require_once 'views/layouts/footer.php';
			}
			else
				$this -> userSignup($_POST);
		}


		// Renderiza la vista de la página de inicio de sesión.
		public function login() {
			if (empty($_POST['login_submit'])) {
				global $url_routes, $configuration;

				$head_title = 'Iniciar sesión';

				$messages = $_SESSION['messages'];

				// Agrega un token al formulario de búsqueda y de inicio de sesión.
				$csrf = new csrf();
				$token = $csrf -> generateToken();

				unset($_SESSION['messages'], $csrf);

				require_once 'views/layouts/head.php';
				require_once 'views/layouts/navbar.php';
				require_once 'views/pages/login.php';
				require_once 'views/layouts/footer.php';
			}
			else
				$this -> userLogin($_POST);
		}


		// Renderiza la vista de un perfil de usuario.
		public function profile() {
			//
		}


		// Registra un nuevo usuario.
		private function userSignup($data) {
			// Valida si el token del formulario de registro de usuarios es igual y vigente.
			$csrf = new csrf();
			$csrf -> validateToken($data['csrf']);

			global $url_routes;

			// Valida los campos del formulario.
			$validations = new validations($url_routes['signup']);
			$data        = $validations -> validate_form($data, array(
				array('name',     'min' => 5, 'max' => 255, 'exist' => true),
				array('username', 'min' => 1, 'max' => 255, 'exist' => true, 'not_spaces' => true),
				array('email',    'min' => 5, 'max' => 255, 'exist' => true, 'not_spaces' => true, 'is_email' => true),
				array('password', 'min' => 6, 'max' => 255, 'equal' => $data['password_confirm'], 'exist' => true, 'not_spaces' => true)
			));

			// Consulta en la base de datos si el usuario existe y valida si coincide con el apodo o e-mail,
			// y si la fecha de validación de e-mail expiró; elimina su cuenta.


			// Formatea los datos del formulario.
			$data['name']     = ucwords($data['name']);     // La primera letra de cada palabra en mayúscula.
			$data['email']    = strtolower($data['email']); // Todas las letras en minúsculas.
			$data['password'] = password_hash($data['password'], PASSWORD_DEFAULT, array('cost' => 12));


			// Registra el nuevo usuario.


			array_push($_SESSION['messages'], 'Su cuenta se ha registrado correctamente, por favor confirma tu dirección de correo electrónico');

			header('Location: ' . $url_routes['login']);

			exit;
		}


		// Autoriza las creedenciales de acceso de un usuario.
		private function userLogin($data) {
			// Valida si el token del formulario de inicio de sesión es igual y vigente.
			$csrf = new csrf();
			$csrf -> validateToken($data['csrf']);

			global $url_routes;

			// Valida los campos del formulario.
			$validations = new validations($url_routes['login']);
			$data        = $validations -> validate_form($data, array(
				array('identity', 'min' => 1, 'max' => 255, 'exist' => true, 'not_spaces' => true),
				array('password', 'min' => 6, 'max' => 255, 'exist' => true, 'not_spaces' => true)
			));

			header('Location: ' . $url_routes['profile']);

			exit;
		}
	}